package interpreter.example;

/**
 * 抽象表达式
 *
 * O表示音阶， O1表示低音阶 O2表示中音阶
 * P表示休止符
 * C D E F G A B 表示 Do Re Mi Fa So La Ti 数字表示拍子 如0.5表示半拍
 *
 * @author cheng:
 * @date 2019/4/26 12:00
 */
public abstract class Expression {
    public void interpret(PlayContext context){
        if(context.getText().length() > 0){
            String playKey = context.getText().substring(0, 1);
            context.setText(context.getText().substring(2));
            double playValue = Double.parseDouble(context.getText().substring(0, context.getText().indexOf(" ")));
            //获取playkey和palyvalue之后将其从演奏文本中删除
            //O 3 E 0.5 G 0.5 A 3 => E 0.5 G 0.5 A 3
            context.setText(context.getText().substring(context.getText().indexOf(" ") + 1));
            excute(playKey, playValue);
        }
    }

    /**
     *
     * @param key
     * @param value
     */
    public abstract void excute(String key, double value);
}
